package 线程创建.代理.静态代理;

/**
 * 静态代理
 * 1.委托类和代理类要实现同一个接口
 * 2.代理对象要代理真实的角色
 * 优点
 * 1.代理对象可以完成很多真实对象（委托类）无法完成的事情
 * 2.真实对象（委托类）可以专心完成自己的事情
 */
public class teat1 {
    public static void main(String[] args) {

        //正常写法
        jh1 jh1 = new jh1();
        jhdn jhdn = new jhdn(jh1);
        jhdn.jh();

        System.out.println("=========================");
        //简写
        new jhdn(()-> System.out.println("我在吃饭")).jh();

        System.out.println("=========================");
        //多线程通过Runnable接口实现的本质是通过静态代理实现的。
        new Thread(()-> System.out.println("我是Runnable接口的实现类，也是Thread的委托类。")).start();

//        new Thread(()-> {
//            for (int i = 0; i < 100; i++) {
//                System.out.println("吃饭开心"+i);
//            }
//        }).start();
    }

}
interface jh{
    public void jh();
}
//委托类
class jh1 implements jh{

    @Override
    public void jh() {
        System.out.println("吃饭");
    }
}
//代理类
class jhdn implements jh{
    private jh jh1;

    public jhdn(jh jh1) {
        this.jh1 = jh1;
    }
    @Override
    public void jh() {
        ser();
        this.jh1.jh();
        System.out.println("好开心");
        sec();
    }

    private void sec() {
        System.out.println("结束");
    }

    private void ser() {
        System.out.println("开始");
    }

}